from sqlalchemy import Column, Integer, String, Text, ForeignKey
from sqlalchemy.dialects.mysql import MEDIUMTEXT
from sqlalchemy.orm import relationship
from Model.default import Base


class Base_M(Base):
    __abstract__ = True
    id = Column(Integer, primary_key=True,unique=True,autoincrement=True)
    username = Column(String(20),default="匿名用户")
    account = Column(String(20),unique=True)
    password = Column(String(20))
    hash_ps=Column(String(80))



            #静态资源 ，如id等非自增
class static_data(Base):
    __tablename__ = 'static_data'
    id=Column(Integer, primary_key=True,autoincrement=True)
    life_data_id=Column(Integer,default=1)  #由于需要后续管理手动处理
    user_id = Column(Integer,default=1)  #由于需要初始化表手动管理





           #用户账户信息
# 用户账户信息
class user(Base_M):
    __tablename__ = 'user'
    age = Column(Integer)
    name = Column(String(8))
    sex = Column(String(2), default="保密")
    email = Column(String(25))
    phone = Column(String(11))
    address = Column(String(25))
    life = Column(Text)
    head_image = Column(MEDIUMTEXT)
    app_index_image = Column(MEDIUMTEXT)
    introduction = Column(Text)
    admin = Column(String(10), default='common')
    status = Column(String(10), default="在线")
    # 好友信息,由于是要直接获取，放到token的所以加到这里
    friends_count = Column(Integer, default=0)
    groups_count=Column(Integer, default=0)
    # 不修改user只对其他拓展修改
    expands = relationship("user_expand", back_populates="user_key")
    public_info_fcomment=relationship("first_CommonComment", back_populates="user_key")
    public_info_scomment = relationship("second_CommonComment", back_populates="user_key")


class user_expand(Base):
    __tablename__ = 'user_expand'
    # 这个id实际就是用户的id
    id = Column(Integer, primary_key=True)
    fans_regards = Column(MEDIUMTEXT)
    article_info_l_c = Column(MEDIUMTEXT)
    getlikes=Column(Integer, default=0)
    getcollects = Column(Integer, default=0)
    user_id = Column(Integer, ForeignKey('user.id'))  # 添加外键引用 user 表
    #引用用户信息
    user_key = relationship("user", back_populates="expands")

    # 社区文本处理
    comments_likes_f=Column(MEDIUMTEXT)
    comments_likes_s = Column(MEDIUMTEXT)

    # 聊天房间信息,注意对于群聊的消息并不是直接进行获取的而是通过获取id信息查询,Group_Room处理的。
    # 采用json处理,用于拓展用户的主动操作,这个存储的是所有房间信息
    room_info =Column(MEDIUMTEXT)

    #好友信息,分开方便获取信息
    # 同样采用json处理
    friends_info=Column(MEDIUMTEXT)

    #处理信息获取离线获取,但是私聊还是使用socket来实现时效性
    # json格式
    last_stream=Column(MEDIUMTEXT)

    #在线状态,不使用socket直接获取状态,为了聊天的可离线缓存化
    isonline=Column(Integer,default=0)

    #存储用户的socket信息,ip等
    socket=Column(Text)

    #用于处理用户的申请房间信息,包括状态和类型
    request_room = Column(Text)



        #用户生活记录
class life_data(Base):
    __tablename__ = 'life_data'
    # 这个由于要后存储需要手动管理,因为他不会再内存里产生
    life_id=Column(Integer,primary_key=True)
    user_id = Column(Integer )
    title=Column(String(38))
    text=Column(Text)
    date=Column(Text)
    kind=Column(Text)
    video_info=Column(Text)
    image_info=Column(Text)
    able=Column(Integer,default=1)



class image_info(Base):
    __tablename__ = 'image_info'
    id=Column(Integer, primary_key=True,autoincrement=True)
    src=Column(Text)
class video_info(Base):
    __tablename__ = 'video_info'
    id=Column(Integer, primary_key=True,autoincrement=True)
    src=Column(Text)




            #用户使用分析
class user_time_behavior(Base):
    __tablename__ = 'user_behavior'
    user_id=Column(Integer, primary_key=True)
    mon=Column(Text)
    tue=Column(Text)
    wed=Column(Text)
    thu=Column(Text)
    fri=Column(Text)
    sat=Column(Text)
    sun=Column(Text)
    last_login=Column(Text)
    k_default=Column(Integer,default=0)
    k_life=Column(Integer,default=0)
    k_food=Column(Integer,default=0)
    k_diary=Column(Integer,default=0)


class time_week(Base):
    __tablename__ = 'time_week'
    id=Column(Integer, primary_key=True,autoincrement=True)
    user_id=Column(Integer)
    d_mon=Column(Integer)
    d_sun=Column(Integer)
    mon = Column(Integer)
    tue = Column(Integer)
    wed = Column(Integer)
    thu = Column(Integer)
    fri = Column(Integer)
    sat = Column(Integer)
    sun = Column(Integer)
class time_active_span(Base):
    __tablename__ = 'time_active_span'
    user_id=Column(Integer, primary_key=True)
    fn1=Column(Integer)
    fn2=Column(Integer)
    fn3=Column(Integer)
    fn4=Column(Integer)
    fn5=Column(Integer)

class Ai_history(Base):
    __tablename__ = 'ai_history'
    id = Column(Integer, primary_key=True, default=0,autoincrement=True)
    user_id=Column(Integer)
    text = Column(Text)
    tittle=Column(Text)











